﻿// Copyright 2007-2008 Rory Plaire (codekaizen@gmail.com)

using System;

namespace NPack.Interfaces
{
    /// <summary>
    /// Defines a type which has typical numerically computable properties.
    /// </summary>
    /// <typeparam name="T">Type which is computable.</typeparam>
    public interface IComputable<T> : IArithmetic<T>, IBooleanComparable<T>, IExponential<T>
    {
        /// <summary>
        /// Computes the absolute value of the value.
        /// </summary>
        /// <returns>The absolute value of the IComputable value.</returns>
        T Abs();

        /// <summary>
        /// Sets the value of the IComputable value.
        /// </summary>
        /// <param name="value">Value used to set the IComputable.</param>
        /// <returns>The value of the IComputable converted from <paramref name="value"/>.</returns>
        T Set(Double value);

        T SetFrom(T value);



    }
}
